package org.opens.lambda.collector;

import org.junit.Test;
import org.opens.lambda.UserEntity;

import java.util.List;
import java.util.stream.Collector;

public class MyCollectorDemo {

    /**
     * 输出:
     *      main-进入-> supplier
     *      main-进入-> accumulator
     *      main-进入-> combiner
     *      main-进入-> characteristics
     *      main-accumulator 的 method 执行一次, 操作对象为: User{id=-1450298177, name='fxR59', age=68}
     *      main-accumulator 的 method 执行一次, 操作对象为: User{id=-1170511014, name='S3GkD', age=75}
     *      main-accumulator 的 method 执行一次, 操作对象为: User{id=692324420, name='Nc2do', age=31}
     *      main-accumulator 的 method 执行一次, 操作对象为: User{id=-632173195, name='hdgWR', age=78}
     *      main-accumulator 的 method 执行一次, 操作对象为: User{id=247507746, name='UPiUT', age=51}
     *      main-进入-> characteristics
     *      [User{id=-1450298177, name='fxR59', age=68}, User{id=-1170511014, name='S3GkD', age=75}, User{id=692324420, name='Nc2do', age=31}, User{id=-632173195, name='hdgWR', age=78}, User{id=247507746, name='UPiUT', age=51}]
     * 说明:
     *      1. 可以发现, supplier只执行了1次, 其作用就是提供一个中间容器;
     *      2. accumulator所返回的函数会被执行stream中元素的个数次;
     *      3. finisher方法并没有输出, 不清楚原因是什么.
     */
    @Test
    public void test1() {
        List<UserEntity> list = UserEntity.getList(5);
        Collector<UserEntity, List<UserEntity>, List<UserEntity>> myCollector = new MyToListCollector<>();
        List<UserEntity> collect = list.stream().filter(x -> x.getAge() > 30).collect(myCollector);
        System.out.println(collect);
    }

}
